﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace 软构大作业
{
    public partial class Form9 : Form
    {
        private new AutoAdaptWindowsSize AutoSize;
        protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;
                cp.ExStyle |= 0x02000000;
                return cp;
            }
        }

        private DataTable originalBookDataTable; // 保存原始图书数据
        public Form9()
        {
            InitializeComponent();
            // 设置窗体的KeyPreview属性为true，以便窗体可以接收键盘事件
            this.KeyPreview = true;
            // 为窗体添加KeyDown事件处理
            this.KeyDown += Form9_KeyDown;
        }

        private void ConfigureDataGridView()
        {
            // 整行选择模式
            dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
            dataGridView1.MultiSelect = false;

            // 启用单元格文本自动换行（关键！）
            dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.AllCells; // 自动调整行高以适应内容
            dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True; // 允许文本换行

            // 增加行高（原为30，调整为40-50，根据换行内容多少）
            dataGridView1.RowTemplate.Height = 45;

            // 允许用户手动调整列宽（可选，提升交互性）
            dataGridView1.AllowUserToResizeColumns = true;

            // 字体设置（使用更易读的字体，如微软雅黑，字号9-10）
            dataGridView1.DefaultCellStyle.Font = new Font("Microsoft YaHei", 9);
            dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("Microsoft YaHei", 10, FontStyle.Bold);

            // 隐藏行号列
            dataGridView1.RowHeadersVisible = false;
        }

        private void Form9_FormClosed(object sender, FormClosedEventArgs e)
        {
            textBox1.Text = "";
            Global.Instance.form9login=null;
            Global.Instance.form7login.Show();
        }

        private void LoadBookData()
        {
            try
            {
                Data dao = new Data(); // 假设使用与Form12相同的Data类操作数据库
                string sql = "SELECT book_id AS ID, title AS 书名, author AS 作者, " +
                             "publisher AS 出版社, location AS 存放位置, " +
                             "stock AS 库存, borrow_count AS 借阅次数, category AS 类别 " +
                             "FROM library_db.books"; // 根据实际表名调整
                SqlDataReader reader = dao.read(sql);

                originalBookDataTable = new DataTable();
                // 定义列名（与SQL查询的别名一致）
                originalBookDataTable.Columns.Add("ID", typeof(string));
                originalBookDataTable.Columns.Add("书名", typeof(string));
                originalBookDataTable.Columns.Add("作者", typeof(string));
                originalBookDataTable.Columns.Add("出版社", typeof(string));
                originalBookDataTable.Columns.Add("存放位置", typeof(string));
                originalBookDataTable.Columns.Add("库存", typeof(int));
                originalBookDataTable.Columns.Add("借阅次数", typeof(int));
                originalBookDataTable.Columns.Add("类别", typeof(string));

                while (reader.Read())
                {
                    DataRow row = originalBookDataTable.NewRow();
                    row["ID"] = reader["ID"].ToString();
                    row["书名"] = reader["书名"].ToString();
                    row["作者"] = reader["作者"].ToString() ?? "未知";
                    row["出版社"] = reader["出版社"].ToString() ?? "未知";
                    row["存放位置"] = reader["存放位置"].ToString() ?? "未记录";
                    row["库存"] = reader["库存"] is DBNull ? 0 : (int)reader["库存"];
                    row["借阅次数"] = reader["借阅次数"] is DBNull ? 0 : (int)reader["借阅次数"];
                    row["类别"] = reader["类别"].ToString() ?? "无分类";
                    originalBookDataTable.Rows.Add(row);
                }
                reader.Close();
                dao.DaoClose();

                // 绑定数据到DataGridView
                dataGridView1.DataSource = originalBookDataTable;
                // 配置列宽（根据需求调整）
                ConfigureColumns();
            }
            catch (Exception ex)
            {
                MessageBox.Show("加载图书数据失败: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void ConfigureColumns()
        {
            // 根据字段内容长度设置合理宽度（示例值，可根据实际调整）
            dataGridView1.Columns["ID"].Width = 80;                  // 固定ID列宽度
            dataGridView1.Columns["书名"].Width = 200;               // 书名列加宽
            dataGridView1.Columns["作者"].Width = 120;               // 作者列
            dataGridView1.Columns["出版社"].Width = 150;             // 出版社列
            dataGridView1.Columns["存放位置"].Width = 250;           // 存放位置列（长文本，重点加宽）
            dataGridView1.Columns["库存"].Width = 80;                // 数字列可窄一些
            dataGridView1.Columns["借阅次数"].Width = 80;            // 数字列
            dataGridView1.Columns["类别"].Width = 100;               // 类别列

            // 针对超长文本列（如存放位置），允许自动调整宽度（可选）
            // dataGridView1.Columns["存放位置"].AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells; 

            // 统一设置列内容居中显示（提升可读性）
            foreach (DataGridViewColumn column in dataGridView1.Columns)
            {
                column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; // 文本左对齐
                column.MinimumWidth = 60; // 防止列宽被缩得太小
                column.SortMode = DataGridViewColumnSortMode.NotSortable; // 禁止排序
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if(Global.Instance.form10login == null)
            {
                Form10 form10 = new Form10();
                Global.Instance.form10login = form10;
            }
            Global.Instance.form10login.Show();
            Global.Instance.form9login.Hide();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            // 检查是否有选中的行
            if (dataGridView1.SelectedRows.Count == 0)
            {
                MessageBox.Show("请先选择要修改的图书！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            // 获取选中的行
            DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];

            // 获取图书信息
            string bookId = selectedRow.Cells["ID"].Value.ToString();
            string title = selectedRow.Cells["书名"].Value.ToString();
            string author = selectedRow.Cells["作者"].Value.ToString();
            string publisher = selectedRow.Cells["出版社"].Value.ToString();
            string location = selectedRow.Cells["存放位置"].Value.ToString();
            int stock = Convert.ToInt32(selectedRow.Cells["库存"].Value);
            string category = selectedRow.Cells["类别"].Value.ToString();

            // 如果Form11未创建，则创建并显示
            if (Global.Instance.form11login == null)
            {
                Form11 form11 = new Form11();
                Global.Instance.form11login = form11;
            }

            // 将图书信息传递给Form11
            Global.Instance.form11login.SetBookInfo(bookId, title, author, publisher, location, stock, category);

            // 显示Form11并隐藏当前窗口
            Global.Instance.form11login.Show();
            Global.Instance.form9login.Hide();
        }

        private void button6_Click(object sender, EventArgs e)
        {
            textBox1.Text = "";
            Global.Instance.form9login.Hide();
            Global.Instance.form7login.Show();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            //删除弹窗提示
            DialogResult result = MessageBox.Show("确定要删除吗？", "确认删除", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if(result == DialogResult.Yes)
            {
                try
                {
                    // 检查是否有选中的行
                    if (dataGridView1.SelectedRows.Count == 0)
                    {
                        MessageBox.Show("请先选择要删除的图书！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return;
                    }

                    // 获取选中的行
                    DataGridViewRow selectedRow = dataGridView1.SelectedRows[0];

                    // 获取图书ID
                    string bookId = selectedRow.Cells["ID"].Value.ToString();

                    // 构建SQL删除语句
                    string deleteSql = "DELETE FROM library_db.books WHERE book_id = @BookId";

                    // 创建参数
                    SqlParameter[] parameters = new SqlParameter[]
                    {
                new SqlParameter("@BookId", bookId)
                    };

                    // 执行删除操作
                    Data dao = new Data();
                    int rowsAffected = dao.ExecuteSql(deleteSql, parameters);

                    if (rowsAffected > 0)
                    {
                        MessageBox.Show("图书删除成功！", "成功", MessageBoxButtons.OK, MessageBoxIcon.Information);

                        // 刷新图书列表
                        LoadBookData();
                    }
                    else
                    {
                        MessageBox.Show("删除失败，未找到该图书！", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }

                    dao.DaoClose();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("删除图书过程中发生错误: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
            else
            {
                MessageBox.Show("取消删除。");
            }
        }

        private void Form9_Load(object sender, EventArgs e)
        {
            ConfigureDataGridView(); // 初始化DataGridView样式
            LoadBookData(); // 加载图书数据
            AutoSize = new AutoAdaptWindowsSize(this);
            this.SizeChanged += new EventHandler(Form_SizeChanged);

            textBox1.KeyPress += (s, a) =>
            {
                if (a.KeyChar == (char)Keys.Enter) // 检测回车键
                {
                    button1_Click(s, a); // 触发搜索
                    a.Handled = true; // 阻止回车键默认行为（如换行）
                }
            };
        }
        private void Form9_KeyDown(object sender, KeyEventArgs e)
        {
            // 检查是否按下Enter键
            if (e.KeyCode == Keys.Enter)
            {
                // 触发button1的点击事件
                button1.PerformClick();
                // 标记事件已处理，防止其他控件处理该事件
                e.Handled = true;
                e.SuppressKeyPress = true; // 防止发出"叮"的声音
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string searchKeyword = textBox1.Text.Trim(); // 获取搜索关键字（去空格）
            SearchBooks(searchKeyword); // 执行搜索
        }

        private void SearchBooks(string keyword)
        {
            if (string.IsNullOrEmpty(keyword))
            {
                // 如果搜索框为空，恢复显示全部图书
                dataGridView1.DataSource = originalBookDataTable;
                return;
            }

            try
            {
                // 创建一个新的 DataTable，用于存储搜索结果
                DataTable searchResults = new DataTable();
                searchResults.Columns.Add("ID", typeof(string));
                searchResults.Columns.Add("书名", typeof(string));
                searchResults.Columns.Add("作者", typeof(string));
                searchResults.Columns.Add("出版社", typeof(string));
                searchResults.Columns.Add("存放位置", typeof(string));
                searchResults.Columns.Add("库存", typeof(int));
                searchResults.Columns.Add("借阅次数", typeof(int));
                searchResults.Columns.Add("类别", typeof(string));

                // 遍历原始图书数据，查找匹配的记录
                foreach (DataRow row in originalBookDataTable.Rows)
                {
                    // 对书名、作者、出版社进行模糊匹配
                    if (row["书名"].ToString().ToLowerInvariant().Contains(keyword.ToLowerInvariant()) ||
                        row["作者"].ToString().ToLowerInvariant().Contains(keyword.ToLowerInvariant()) ||
                        row["出版社"].ToString().ToLowerInvariant().Contains(keyword.ToLowerInvariant()))
                    {
                        // 将匹配的行添加到搜索结果中
                        DataRow newRow = searchResults.NewRow();
                        newRow["ID"] = row["ID"];
                        newRow["书名"] = row["书名"];
                        newRow["作者"] = row["作者"];
                        newRow["出版社"] = row["出版社"];
                        newRow["存放位置"] = row["存放位置"];
                        newRow["库存"] = row["库存"];
                        newRow["借阅次数"] = row["借阅次数"];
                        newRow["类别"] = row["类别"];
                        searchResults.Rows.Add(newRow);
                    }
                }

                // 如果没有找到匹配的记录
                if (searchResults.Rows.Count == 0)
                {
                    MessageBox.Show($"未找到与 '{keyword}' 相关的图书", "搜索结果", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }

                // 将搜索结果绑定到 DataGridView
                dataGridView1.DataSource = searchResults;

                // 配置列宽（可选，根据搜索结果重新调整列宽）
                ConfigureColumns();
            }
            catch (Exception ex)
            {
                MessageBox.Show("搜索过程中发生错误: " + ex.Message, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        public void RefreshBookList()
        {
            LoadBookData();
        }

        private void button5_Click(object sender, EventArgs e)
        {
            // 刷新图书列表
            LoadBookData();
            MessageBox.Show("图书列表已刷新！", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

        private void Form_SizeChanged(object sender, EventArgs e)
        {//窗体大小改变事件
            if (AutoSize != null) // 一定加这个判断，电脑缩放布局不是100%的时候，会报错
            {
                AutoSize.FormSizeChanged();
            }
        }
    }
}
